/**
 * @(#) Project: schtech Modify Information:
 *      ======================================
 *      ======================================= Author Date Description
 *      ------------ ---------- --------------------------------------------
 *      name 2014年2月24日 description Copyright Notice:
 *      ============================
 *      ================================================= Copyright 2014 Schtech
 *      Software, Inc. All rights reserved. This software is the confidential
 *      and proprietary information of Shenzhen SCHTECH Software Co., Ltd.
 *      ("Confidential Information"). You shall not disclose such Confidential
 *      Information and shall use it only in accordance with the terms of the
 *      license agreement you entered into with Schtech. Warning:
 *      ================
 *      =============================================================
 */
package net.schtech.source;

import java.util.Properties;

import net.schtech.source.base.conf.route.AdminRoute;
import net.schtech.source.base.conf.route.HomeRoute;

import org.apache.log4j.PropertyConfigurator;

import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.activerecord.tx.TxByRegex;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.render.ViewType;

/**
 * <p>
 * <strong>Description:</strong> 项目配置
 * </p>
 * 
 * @Company 深圳盛创汇科技有限公司
 * @author <a href="mailto: duanxuhua@163.com">段绪华</a>
 * @version 1
 * @Copyright Copyright 2014, Shenzhen Schtech Co., Ltd. All right reserved.
 */
public class Config extends JFinalConfig {

    /**
     * <p>
     * <strong>Description:</strong> 全局配置
     * </p>
     * 
     * @param me
     * @author <a href="mailto: duanxuhua@163.com">段绪华</a>
     * @update 日期: 2014年2月24日 <a href="mailto: xxx@xx.xx">作者中文名</a> 变更描述
     */

    @Override
    public void configConstant(Constants me) {
        //加载LOG4J
        Properties log4j = loadPropertyFile("classes/conf/develop/log4j.properties");
        PropertyConfigurator.configure(log4j);
        //加载系统配置，一这要放在最后面
        loadPropertyFile("classes/conf/develop/schtech");
        me.setDevMode(true);
        me.setViewType(ViewType.JSP);
    }

    /**
     * <p>
     * <strong>Description:</strong> 前端至控制器映射配置
     * </p>
     * 
     * @param me
     * @author <a href="mailto: duanxuhua@163.com">段绪华</a>
     * @update 日期: 2014年2月24日 <a href="mailto: xxx@xx.xx">作者中文名</a> 变更描述
     */

    @Override
    public void configRoute(Routes me) {
        me.add(new AdminRoute());
        me.add(new HomeRoute());
    }

    /**
     * <p>
     * <strong>Description:</strong> 系统插件配置
     * </p>
     * 
     * @param me
     * @author <a href="mailto: duanxuhua@163.com">段绪华</a>
     * @update 日期: 2014年2月24日 <a href="mailto: xxx@xx.xx">作者中文名</a> 变更描述
     */

    @Override
    public void configPlugin(Plugins me) {
        confDruidPlugin(me);
    }

    /**
     * <p>
     * <strong>Description:</strong> 系统拦截器配置
     * </p>
     * 
     * @param me
     * @author <a href="mailto: duanxuhua@163.com">段绪华</a>
     * @update 日期: 2014年2月24日 <a href="mailto: xxx@xx.xx">作者中文名</a> 变更描述
     */

    @Override
    public void configInterceptor(Interceptors me) {
        //事务拦截器配置
        me.add(new TxByRegex(".*save.*"));
        me.add(new TxByRegex(".*update.*"));
        me.add(new TxByRegex(".*insert.*"));
        me.add(new TxByRegex(".*add.*"));
        
        //登录验证拦截
        //me.add(new LoginInterceptor());
    }

    /**
     * <p>
     * <strong>Description:</strong> 系统处理配置
     * </p>
     * 
     * @param me
     * @author <a href="mailto: duanxuhua@163.com">段绪华</a>
     * @update 日期: 2014年2月24日 <a href="mailto: xxx@xx.xx">作者中文名</a> 变更描述
     */

    @Override
    public void configHandler(Handlers me) {
    }

    /**
     * <p>
     * <strong>Description:</strong> 数据源插件配置，使用DRUID
     * </p>
     * 
     * @param plugins
     * @author <a href="mailto: duanxuhua@163.com">段绪华</a>
     * @update 日期: 2014年2月13日 <a href="mailto: xxx@xx.xx">作者中文名</a> 变更描述
     */
    private void confDruidPlugin(Plugins plugins) {
        DruidPlugin druidPlugin = new DruidPlugin(getProperty("jdbcUrl"), 
                getProperty("user"), getProperty("password"));
        druidPlugin.set(getPropertyToInt("druid.initialSize"), 
                getPropertyToInt("druid.minIdle"), 
                getPropertyToInt("druid.maxActive"));
        druidPlugin.setFilters(getProperty("druid.filters"));
        druidPlugin.setMaxWait(getPropertyToInt("druid.maxWait"));
        druidPlugin.setTimeBetweenEvictionRunsMillis(getPropertyToInt("druid.timeBetweenEvictionRunsMillis"));
        druidPlugin.setMinEvictableIdleTimeMillis(getPropertyToInt("druid.minEvictableIdleTimeMillis"));
        ActiveRecordPlugin arp = new ActiveRecordPlugin(druidPlugin);
        plugins.add(druidPlugin);
        plugins.add(arp);
        mapper(arp);
    }

    /**
     * <p>
     * <strong>Description:</strong> 表与模型映射配置
     * </p>
     * 
     * @param arp
     * @author <a href="mailto: duanxuhua@163.com">段绪华</a>
     * @update 日期: 2014年2月13日 <a href="mailto: xxx@xx.xx">作者中文名</a> 变更描述
     */
    private void mapper(ActiveRecordPlugin arp) {
    }
}
